package aaa.aaa.timber

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.Button
import cn.dazhou.utils.StoragePermissionUtil
import com.evendai.loglibrary.Timber


class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        Timber.fi("onCreate执行结束！")
        val btnPrintLog = findViewById<Button>(R.id.btn_print_log)
        val btnLogToggle = findViewById<Button>(R.id.btn_log_toggle)
        /*
        绑定日志开关的调用到指定的View上。
        长按指定的view 1次，再短按指定的View7次就会触发showLogToggle()的调用。
        长按指定的view 2 ~ 4次，再短按指定的View7次就会触发writeAllLogToggle()的调用。
        长按指定的view 5次或更多，再短按指定的View7次就会触发closeAllLogToggle()的调用。
         */
        Timber.bindLogToggleToView(btnLogToggle)
        btnPrintLog.setOnClickListener(::printLog)

        StoragePermissionUtil.registerForActivityResult(this)
        StoragePermissionUtil.requestPermission(this) {
            Log.i(MainActivity::class.java.simpleName, "拥有了存储权限")
            // 如果日志设置为保存在SD卡根目录，则在获取到存储权限后需要再初始化一次
            App.initTimber(application)
        }
    }

    @Suppress("UNUSED_PARAMETER")
    private fun printLog(view: View) {
        val tag = MainActivity::class.java.simpleName
        Log.i(tag, "BuildConfig.DEBUG = ${BuildConfig.DEBUG}")
        Log.i(tag, "Timber.isShowLog() = ${Timber.isShowLog()}")
        Log.i(tag, "Timber.isWriteAllLog() = ${Timber.isWriteAllLog()}")
        Log.i(tag, "Timber.isCloseAllConsoleLog() = ${Timber.isCloseAllConsoleLog()}")

        // 输出日志到控制台(DEBUG = true的状态下，即使isShowLog() = false也正常输出日志)
        Timber.v("vvvvv")
        Timber.d("ddddd")
        Timber.i("iiiii")
        Timber.w("wwwww")

        // error级别的日志输出不受isShowLog变量的影响（同时还会写入log.txt文件中），只受isCloseAllConsoleLog变量的影响
        Timber.e("eeeee")
        Timber.tag("ABCD").e("这里使用了自定义TAG")
//
//        // 输出日志到控制台和文件
        Timber.fi("Hello")
        Timber.fe("我是error异常，会写到bug文件中")
        Timber.fw("警告")
//        Timber.fe(Exception("惨了"))
//        Timber.fe(Exception("又出异常了"), "不慌，没事")

//        Timber.setIsShowLog(true)   // 设置日志开关为开状态(当天有效，第二天自动变成关）
//        Timber.showLogToggle() // 切换日志开关，开变成关，关变成开(当天有效，第二天自动变成关）

        // 设置把所有等级的日志都写到log.txt中，包括Timber.i、Timber.d 等等不带f的日志都会写到文件中
//        Timber.setIsWriteAllLog(true) // 当天有效，第二天自动关闭
//        Timber.writeAllLogToggle()    // 开/关切换，当天有效，第二天自动关闭

        // 关闭所有的输出到控制台的日志（即不显示控制台日志，但写文件不受影响）（即使isShowLog为true也不显示日志）
//        Timber.setIsCloseAllConsoleLog(true) // 当天有效，第二天自动关闭
//        Timber.closeAllConsoleLogToggle() // 开/关切换，当天有效，第二天自动关闭

//        val i = 0
//        val ress = 1 / i // 故意抛一个异常让程序崩溃，以查看Timber保存异常到文件的情况
    }

}